arm64/mm: Limit TASK_SIZE_64 for compatibility
authorBen Hutchings <ben@decadent.org.uk>
Fri, 16 Sep 2016 15:32:23 +0000 (16:32 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 4 Jan 2017 19:39:36 +0000 (19:39 +0000)
Some programs assume they can use 17 tag bits in a 64-bit pointer,
which works on most other 64-bit architectures but not on arm64 with
CONFIG_ARM64_VA_BITS_48.  To maintain compatibility with these
programs, limit TASK_SIZE_64 to a maximum of 1 << 47.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Gbp-Pq: Topic bugfix/arm64
Gbp-Pq: Name arm64-mm-limit-task_size_64-for-compatibility.patch

arch/arm64/include/asm/memory.h

index 31b73227b41f3076813f5d33122a3e1951e47f91..6e0b8099f30ffe5f87345565156ef062c0a856ff 100644 (file)
 #define PCI_IO_END             (VMEMMAP_START - SZ_2M)
 #define PCI_IO_START           (PCI_IO_END - PCI_IO_SIZE)
 #define FIXADDR_TOP            (PCI_IO_START - SZ_2M)
+#if VA_BITS <= 47
 #define TASK_SIZE_64           (UL(1) << VA_BITS)
+#else
+/* User-space might use up to 17 tag bits in 64-bit pointers */
+#define TASK_SIZE_64           (UL(1) << 47)
+#endif
 
 #ifdef CONFIG_COMPAT
 #define TASK_SIZE_32           UL(0x100000000)